﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using NHibernate;
using NHibernate.Cfg;
using TeamCommunitySolution.Extensions;
using TeamCommunitySolution.Modules.Base;
using TeamCommunitySolution.Modules.Leagues;
using TeamCommunitySolution.Repositories.Base;
using TeamCommunitySolution.Repositories.Leagues;

namespace TeamCommunitySolution
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static string HostName = ConfigurationManager.AppSettings["HostName"].ToString();

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );

        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);

            ViewEngines.Engines.Clear();
            ViewEngines.Engines.Add(new ThemeViewEngine());

        }

        /// <summary>
        /// The Base Manager Instance.
        /// </summary>
        private static BaseManager baseService;

        /// <summary>
        /// The League Manager Instance.
        /// </summary>
        private static LeagueManager leagueService;

        /// <summary>
        /// Gets the base service.
        /// </summary>
        /// <value>The base service.</value>
        public static BaseManager BaseService
        {
            get
            {
                if (baseService == null)
                {
                    BaseManagerImpl.CreateInstance(BaseRepositoryImpl.CreateInstance());
                }

                return baseService;
            }
        }

        /// <summary>
        /// Gets the league manager.
        /// </summary>
        /// <value>The league manager.</value>
        public static LeagueManager LeagueManager
        {
            get
            {
                if (leagueService == null)
                {
                    LeagueManagerImpl.CreateInstance(LeagueRepositoryImpl.CreateInstance());
                }

                return leagueService;
            }
        }
    }
}